package com.rainszj.controller.admin;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.rainszj.pojo.po.Tag;
import com.rainszj.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import static com.rainszj.constant.WebConstant.*;
/**
 * 后台标签页
 *
 * @author rainszj
 * 2020/3/13
 */
@Controller
public class TagController {

    @Autowired
    TagService tagService;

    /**
     * 后台分页展示所有的标签
     *
     * @param pageNum
     * @param model
     * @return
     */
    @GetMapping("/admin/tags")
    public String list(@RequestParam(defaultValue = "1", name = "pageNum") Integer pageNum, Model model) {
        // 设置分页的大小，默认获取第一页，查询 4条内容
        PageInfo<Tag> pageInfo = PageHelper.startPage(pageNum, PAGE_SIZE).doSelectPageInfo(() -> tagService.listAdminTag());
        // 返回给前端
        model.addAttribute("pageInfo", pageInfo);
        return "admin/tags";
    }


    /**
     * 根据 ID 删除标签
     *
     * @param id
     * @return
     */
    @DeleteMapping("/admin/tags/{id}")
    public String deleteTag(@PathVariable("id") Long id, RedirectAttributes attributes) {
        String tagName = tagService.queryTagById(id).getName();

        int result = tagService.removeTag(id);
        if (result >= 0) {
            attributes.addFlashAttribute("msg", tagName+ "删除成功");
        } else {
            attributes.addFlashAttribute("msg", tagName + "删除失败");
        }
        return "redirect:/admin/tags";
    }

    /**
     * 跳转到修改标签页面
     *
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/admin/tags/{id}")
    public String toUpdateTag(@PathVariable("id") Long id, Model model) {
        Tag tag = tagService.queryTagById(id);
        model.addAttribute("tag", tag);
        return "admin/tag-upd";
    }

    /**
     * put方式，修改标签
     *
     * @return
     */
    @PutMapping("/admin/tags/{id}")
    public String updateTag(@PathVariable("id") Long id, Tag tag, RedirectAttributes attributes) {


        int result = tagService.updateTag(id, tag);
        if (result != 0) {
            attributes.addFlashAttribute("msg", tag.getName() + "修改成功");
        } else {
            attributes.addFlashAttribute("msg", tag.getName() + "修改失败");
        }

        return "redirect:/admin/tags";
    }

    /**
     * 跳转到添加标签页面
     *
     * @return
     */
    @GetMapping("/admin/addTag")
    public String toAddTag() {
        return "admin/tag-add";
    }

    /**
     * 添加标签
     *
     * @param tag
     * @return
     */
    @PostMapping("/admin/tags")
    public String addTag(Tag tag, RedirectAttributes attributes) {

        Tag queryTag = tagService.queryTagByName(tag.getName());
        if (queryTag != null) {
            attributes.addFlashAttribute("message", "不能添加重复的标签");
            return "redirect:/admin/addTag";
        }


        int result = tagService.saveTag(tag);
        if (result != 0) {
            attributes.addFlashAttribute("msg", tag.getName() + "添加成功");
        } else {
            attributes.addFlashAttribute("msg", tag.getName() + "添加失败");
        }

        return "redirect:/admin/tags";
    }


}
